## API Report File for "@backstage/plugin-playlist"

> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/).

```ts
/// <reference types="react" />

import { ApiRef } from '@backstage/core-plugin-api';
import { BackstagePlugin } from '@backstage/core-plugin-api';
import { DiscoveryApi } from '@backstage/core-plugin-api';
import { Entity } from '@backstage/catalog-model';
import { FetchApi } from '@backstage/core-plugin-api';
import { JSX as JSX_2 } from 'react';
import { Playlist } from '@backstage/plugin-playlist-common';
import { PlaylistMetadata } from '@backstage/plugin-playlist-common';
import { PropsWithChildren } from 'react';
import { default as React_2 } from 'react';
import { RouteRef } from '@backstage/core-plugin-api';

// @public (undocumented)
export const CreatePlaylistButton: () => React_2.JSX.Element;

// @public (undocumented)
export type DefaultPlaylistFilters = {
  noop?: NoopFilter;
  owners?: PlaylistOwnerFilter;
  personal?: PersonalListFilter;
  text?: PlaylistTextFilter;
};

// @public (undocumented)
export const DefaultPlaylistIndexPage: () => React_2.JSX.Element;

// @public (undocumented)
export const EntityPlaylistDialog: (
  props: EntityPlaylistDialogProps,
) => JSX_2.Element;

// @public (undocumented)
export type EntityPlaylistDialogProps = {
  open: boolean;
  onClose: () => void;
};

// @public (undocumented)
export interface GetAllPlaylistsRequest {
  // (undocumented)
  editable?: boolean;
  filter?:
    | Record<string, string | string[] | null>[]
    | Record<string, string | string[] | null>;
}

// @public (undocumented)
export class NoopFilter implements PlaylistFilter {
  // (undocumented)
  getBackendFilters(): {
    '': null;
  };
}

// @public (undocumented)
export class PersonalListFilter implements PlaylistFilter {
  constructor(
    value: PersonalListFilterValue,
    isOwnedPlaylist: (playlist: Playlist) => boolean,
  );
  // (undocumented)
  filterPlaylist(playlist: Playlist): boolean;
  // (undocumented)
  readonly isOwnedPlaylist: (playlist: Playlist) => boolean;
  // (undocumented)
  toQueryValue(): string;
  // (undocumented)
  readonly value: PersonalListFilterValue;
}

// @public (undocumented)
export const enum PersonalListFilterValue {
  // (undocumented)
  all = 'all',
  // (undocumented)
  following = 'following',
  // (undocumented)
  owned = 'owned',
}

// @public (undocumented)
export const PersonalListPicker: () => React_2.JSX.Element;

// @public (undocumented)
export interface PlaylistApi {
  // (undocumented)
  addPlaylistEntities(playlistId: string, entityRefs: string[]): Promise<void>;
  // (undocumented)
  createPlaylist(playlist: Omit<PlaylistMetadata, 'id'>): Promise<string>;
  // (undocumented)
  deletePlaylist(playlistId: string): Promise<void>;
  // (undocumented)
  followPlaylist(playlistId: string): Promise<void>;
  // (undocumented)
  getAllPlaylists(req: GetAllPlaylistsRequest): Promise<Playlist[]>;
  // (undocumented)
  getPlaylist(playlistId: string): Promise<Playlist>;
  // (undocumented)
  getPlaylistEntities(playlistId: string): Promise<Entity[]>;
  // (undocumented)
  removePlaylistEntities(
    playlistId: string,
    entityRefs: string[],
  ): Promise<void>;
  // (undocumented)
  unfollowPlaylist(playlistId: string): Promise<void>;
  // (undocumented)
  updatePlaylist(playlist: PlaylistMetadata): Promise<void>;
}

// @public (undocumented)
export const playlistApiRef: ApiRef<PlaylistApi>;

// @public (undocumented)
export class PlaylistClient implements PlaylistApi {
  constructor(options: { discoveryApi: DiscoveryApi; fetchApi: FetchApi });
  // (undocumented)
  addPlaylistEntities(playlistId: string, entityRefs: string[]): Promise<void>;
  // (undocumented)
  createPlaylist(playlist: Omit<PlaylistMetadata, 'id'>): Promise<string>;
  // (undocumented)
  deletePlaylist(playlistId: string): Promise<void>;
  // (undocumented)
  followPlaylist(playlistId: string): Promise<void>;
  // (undocumented)
  getAllPlaylists(req?: GetAllPlaylistsRequest): Promise<Playlist[]>;
  // (undocumented)
  getPlaylist(playlistId: string): Promise<Playlist>;
  // (undocumented)
  getPlaylistEntities(playlistId: string): Promise<Entity[]>;
  // (undocumented)
  removePlaylistEntities(
    playlistId: string,
    entityRefs: string[],
  ): Promise<void>;
  // (undocumented)
  unfollowPlaylist(playlistId: string): Promise<void>;
  // (undocumented)
  updatePlaylist(playlist: PlaylistMetadata): Promise<void>;
}

// @public (undocumented)
export type PlaylistFilter = {
  getBackendFilters?: () => Record<string, string | string[] | null>;
  filterPlaylist?: (playlist: Playlist) => boolean;
  toQueryValue?: () => string | string[];
};

// @public (undocumented)
export const PlaylistIndexPage: () => JSX_2.Element;

// @public (undocumented)
export const PlaylistList: () => React_2.JSX.Element;

// @public (undocumented)
export const PlaylistListProvider: <
  PlaylistFilters extends DefaultPlaylistFilters,
>({
  children,
}: PropsWithChildren<{}>) => React_2.JSX.Element;

// @public (undocumented)
export class PlaylistOwnerFilter implements PlaylistFilter {
  constructor(values: string[]);
  // (undocumented)
  filterPlaylist(playlist: Playlist): boolean;
  // (undocumented)
  toQueryValue(): string[];
  // (undocumented)
  readonly values: string[];
}

// @public (undocumented)
export const PlaylistOwnerPicker: () => React_2.JSX.Element | null;

// @public (undocumented)
export const PlaylistPage: () => JSX_2.Element;

// @public (undocumented)
export const playlistPlugin: BackstagePlugin<
  {
    root: RouteRef<undefined>;
  },
  {}
>;

// @public (undocumented)
export const PlaylistSearchBar: () => React_2.JSX.Element;

// @public (undocumented)
export const PlaylistSortPicker: () => React_2.JSX.Element;

// @public (undocumented)
export class PlaylistTextFilter implements PlaylistFilter {
  constructor(value: string);
  // (undocumented)
  filterPlaylist(playlist: Playlist): boolean;
  // (undocumented)
  readonly value: string;
}
```
